package com.tsunami.exception.code;

/**
 * 异常状态
 *
 * @author lx
 * @date 2021-09-10 18:31
 */
public enum ExceptionCode implements BaseExceptionCode {
    //公共请求消息
    SUCCESS(200, "请求成功"),
    TABLE_SUCCESS(0, "请求成功"),
    FATL(500, "请求失败"),
    OM_UNAUTHORIZED(3000, "运维权限，您无授权"),
    SUB_HAVE(3001, "下属数据不为空，无法执行操作"),
    ESCAPE_FATL(3002, "参数不符合规范，不能进行查询"),
    TIME_OUT(3003, "连接超时"),
    SERVER_OUT(3004, "服务接口调用失败"),
    RANDOM_OUT(3005, "随机数调用失败"),

    PARAMETER_MISSING(6000, "参数缺失"),
    ROLE_USEING(6001, "角色已被用户关联，无法删除"),
    ROLE_NULL(6002, "角色异常，请刷新重试"),
    ROLE_TYPE_ONLY(6003, "同用户类型只能绑定单角色"),
    ROLE_TYPE(6004, "选中角色为用户类型默认角色无法删除"),
    SUCCESS_NOROLE(6005, "用户添加成功，设置默认角色失败"),
    DEPT_TYPE_HAVE(6006, "部门类型名称已存在"),

    UNLOGIN(4001, "未登录"),
    UNAUTHORIZED(4003, "未授权"),
    CUSTOMER_ABNORMAL(4002, "租户异常，请刷新重试"),
    ARITHMETICEXCEPTION(4007, "算数异常"),
    CLONEEXCEPTION(4008, "克隆异常"),
    METHODEXCEPTION(4009, "请求方法异常"),
    TENANT_MASTER(4011, "主租户无法删除"),
    ROLE_SCOPE(4012, "角色数据超范围"),
    NO_SETING(4013, "配置信息不存在"),
    NO_APP_ROLE(4014, "角色未关联，请联系管理员"),
    NO_DREDGE_APP(4015, "租户未开通应用"),
    AUTHORIZATION_EXPIRATION_APP(4016, "应用授权过期"),
    ONLY_UPDATE_LONELY(4017, "只能修改自己添加数据"),
    PROFILE_NO_HAVE(4018, "用户关联资料异常,请重新登录"),
    APPLICATION_FORBIDDEN(4019, "应用下线或禁用，无法开通"),
    NO_TENANT_NAME(4020, "请设置组织名称"),
    //会员
    NUMULTI(5006, "该会员组不支持多机构"),
    UNMEMBERCODE(5007, "会员编码不能为空"),

    UNMEMBERFEE(5008, "会员年费不能为空"),
    UNMEMBERNUM(5009, "限制数量不能为空"),
    ONMEMBER(5010, "会员说明已存在"),

    NOSAMEPASSWORD(7000, "两次输入密码不同"),
    USER_LOCK(7001, "账号已被停用"),
    USER_DEL(7002, "账号已被删除"),
    USER_HAVE(7003, "账号已存在"),
    NOPASSWORD(7004, "密码不能为空"),
    NOUSER(7005, "用户名不能为空"),
    EMAIL_HAVE(7006, "邮箱已经被使用"),
    PHONE_HAVE(7007, "手机号已经被使用"),
    EX_CAPTCHA(7008, "验证码异常"),
    NOUSER_NOPASSWORD(7009, "用户名或密码为空"),
    EX_USER_OR_PASSWORD(7010, "用户名或密码错误"),
    NO_USER(7005, "用户不存在"),
    AUTHENTICATION_FAIL(7011, "用户认证失败"),
    PHONE_NULL(7012, "手机号不能为空"),
    TENANT_NULL(7013, "租户不存在，请核实团队编码"),
    USER_HAVE_TENANT(7014, "用户已加入此租户，无需重复加入"),

    UPLOUD_FATL(8001, "上传失败"),
    FILE_FATL(8002, "文件不存在"),
    FILE_SIZE_EXCEED_MAX(8003, "文件大小超出限定尺寸"),

    //微信公众号
    NO_WX_MSG(1010001, "数据库中没有公众号相关配置,注意！"),
    NO_MENU_MSG(1010002, "菜单数据为空，请确定公众号菜单已保存！"),
    HAVE_WX_CONFIG(1010003, "微信相关配置已存在，无需重复提交"),
    HAVE_WX_SUBSCRIBE(1010004, "微信相关关注回复已存在，无需重复添加"),
    //资源
    HAVE_CODE(9001, "编码已存在"),

    //个人资料管理
    NOT_GRADE(10001, "年级信息为空"),
    BIND_CLASS(10002, "班级已绑定"),
    HAVE_GRADE(10003, "部分班级信息不为空，请先删除班级，否则无法删除"),
    HAVE_CLASS_NAME(10005, "班级名称已存在"),
    HAVE_CLASS_CODE(10006, "班级编码已存在"),
    //学生成长
    ONLY_OWN(10004, "非自己上传，无法删除"),

    AUDIT_NOT_OPRTION(11001, "已完成审核，无法操作"),
    NOT_OWN(11002, "非个人数据，无法操作"),
    //教师考核
    NOT_GROUP(20001, "请选择用户分组"),
    NOT_OWN_AUTH(20002, "无法对个人数据进行审核"),
    HAVE_DATA_NODONE(20003, "已进行了标准建设，无法执行初始化"),
    OUT_RANGE(20004, "超出周报登记时间，无法执行"),
    AUDIT_NOT_UPDATE(20005, "已完成复核，无法修改"),
    HAVE_PLAN_NODONE(20006, "本组已登记计划，无需重复登记"),
    //排课
    HAVE_NAME(21001, "命名重复"),
    NO_PARENT_SCHEDULE(21002, "关联课表为空，请刷新重试"),
    HAVE_SUBJECT_PLAN(21003, "该班已安排此科目的计划，请核查"),
    NO_SECTION(21004, "未设置课表节次，请核实"),
    NO_WEEKNUM(21005, "未设置课表周次，请核实"),
    NO_CLASSES(21006, "未设置排课班级，请核实"),
    NO_TEACHER(21007, "未设置参与排课的教师，请核实"),
    NO_SUBJECT(21008, "未设置参与排课的科目，请核实"),
    NO_PLANING_CLASSES(21009, "存在未设置教学计划的班级，请核实"),
    GREATER_THAN_SCHEDULE(21010, "教学计划设置课节大于课表容量，请核实"),
    PLAN_NULL(21011, "教学计划为空，请核实"),

    //预约
    HAVE_APPOINTMENT(22001, "已预约，无法再次预约"),
    NO_APPOINTMENT(22002, "未预约，无法取消预约"),
    NO_APPOINTMENT_TIME(22003, "预约时间已过，无法取消预约"),
    NO_APPOINTMENT_DATA(22004, "未设置预约，请核实"),
    HAVA_APPOINTMENT_ARRANGE_WINDOW(22005, "该窗口的预约安排已存在，无法添加预约安排"),
    HAVA_APPOINTMENT_ARRANGE_OFFICER(22006, "办理人员同一时间已有安排，无法添加预约安排"),
    HAVA_WINDOW_NAME(22007, "窗口名称已存在"),
    NO_LOCATION(22008, "办理地点为空，返回地点管理，重新进入"),
    WINDOW_NUM_ZERO(22009, "窗口数量必须大于0"),
    TIME_PERIOD_NULL(22010, "未设置办理时段，请在‘基础管理’-‘办理时段管理’进行配置"),
    HAVA_RANGE_NAME(22011, "时段名称已存在"),
    HAVA_PERSON_ARRANGE(22012, "已存在未办理的预约记录，请勿重复预约"),
    NO_RESERVATION(22013, "无预约记录，请核实后签到"),
    NO_SET_LOCATION(22014, "办理地点有变动，请重新设置"),
    NO_SET_WINDOW(22015, "办理窗口有变动，请重新设置"),
    HAVE_ARRANGE_TIME(22016, "此时段有安排，请核实"),
    //会议
    SIGN_IN_FAIL(23001, "签到失败"),
    UN_APPOINTED_UNABLE_TO_SIGN_IN(23002, "未报名，无法进行签到操作"),
    APPOINTED_HAVE(23003, "已报名，无需重复操作"),
    MEETING_NO_PUBLIC_NOT_SIGN_IN(23004, "会议未发布，无法进行签到操作"),
    //资产
    ASSETS_IS_NULL(24001, "所选资产为空"),
    ;

    private int code;

    private String msg;

    ExceptionCode(int code, String msg) {
        this.code = code;
        this.msg = msg;
    }


    @Override
    public int getCode() {
        return code;
    }

    @Override
    public String getMsg() {
        return msg;
    }

    public ExceptionCode build(String msg, Object... param) {
        this.msg = String.format(msg, param);
        return this;
    }

    public ExceptionCode param(Object... param) {
        msg = String.format(msg, param);
        return this;
    }
}
